function majorityElement(nums) {
    // 辅助函数：统计元素在给定区间内的出现次数
    function countInRange(nums, num, left, right) {
       let count = 0
       for (let i = left; i <= right; i++) {
          if (nums[i] === num) {
             count++
          }
       }
       return count
    }

    // 分治算法主函数
    function majorityElementRec(nums, left, right) {
       // 基本情况：只有一个元素时
       if (left === right) {
          return nums[left]
       }

       // 将数组分成左右两部分
       const mid = Math.floor((left + right) / 2)
       const leftMajority = majorityElementRec(nums, left, mid)
       const rightMajority = majorityElementRec(nums, mid + 1, right)

       // 如果左右部分的多数元素相同，则返回该元素
       if (leftMajority === rightMajority) {
          return leftMajority
       }

       // 否则统计左右多数元素在整个区间内的出现次数
       const leftCount = countInRange(nums, leftMajority, left, right)
       const rightCount = countInRange(nums, rightMajority, left, right)

       // 返回出现次数较多的元素
       return leftCount > rightCount ? leftMajority : rightMajority
    }

    // 调用递归函数，从整个数组开始
    return majorityElementRec(nums, 0, nums.length - 1)
 }

 // 测试用例
 console.log(majorityElement([3, 2, 3])) // 输出：3
 console.log(majorityElement([2, 2, 1, 1, 1, 2, 2])) // 输出：2
 console.log(majorityElement([1])) // 输出：1
 console.log(majorityElement([1, 1, 2, 2, 2, 1, 1, 1])) // 输出：1